<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React!</title>
<!-- react 核心库 -->
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
<!-- dom相关库 -->
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
<!-- Es6->Es5 jsx->js -->
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
<!-- 对 props 进行限制 -->
<script src="https://unpkg.com/prop-types@15.6/prop-types.js"></script>
</head>
<body>
 
<div id="app"></div>
<!-- 使用JSX，属性使用text/babel -->
<script type="text/babel">

    class Person extends React.Component{
        render(){
            console.log(this)
            //对象的解析赋值
            // props 是只读的，不能修改
            const {name, age, sex} = this.props
            return(
                <ul>
                    <li>姓名: {name}</li>
                    <li>年龄: {age}</li>
                    <li>性别: {sex}</li>    
                </ul>
            )
        }
    }
    
    //标签属性类型，必要性限制
    Person.propTypes = {
        //这个PropTypes对象就是引入 prop-types 中的
        
        //name属性是必传的，而且必须是字符串
        name: PropTypes.string.isRequired,
        sex: PropTypes.string,
        age: PropTypes.number,
    }

    //指定标签默认值
    Person.defaultProps = {
        sex: '男',
        age: 18
    }

    //渲染组件
    // ReactDOM.render(<Person name = "tom" age="18" sex = "女"/>, document.getElementById("app"))

    const p = {
        name: 'Alice',
        // age: 20,
        // sex: "女"
    }
    //只有标签属性可以使用展开运算符展开对象
    ReactDOM.render(<Person {...p}/>, document.getElementById("app"))

    
</script>
 
</body>
</html>